package com.guodi.model.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.guodi.model.entity.IdtIndicatorsType;

import java.util.List;

/**
 * @描述：指标分类表 服务类
 * @作者: 彭辉
 * @日期: 2020-06-05
 */
public interface IIdtIndicatorsTypeService extends IService<IdtIndicatorsType> {

    /**
     * @描述:查询排序的最大值
     * @入参:
     * @出参:
     * @作者: 戴伙进
     * @日期: 2020/6/10 11:49
    **/
    Integer selectMaxSort();

    /**
    * @描述: 递归删除子节点数据
    * @入参:
    * @出参:
    * @作者: 代鹏刚
    * @日期: 2021/9/27 17:54
    **/
    void deleteByParentId(String parentId);

    /**
    * @描述: 根据体系编码、年份、行政区划检索数据
    * @入参:
    * @出参:
    * @作者: 代鹏刚
    * @日期: 2021/9/28 16:49
    **/
    IdtIndicatorsType findByCode(String code, String year, String divisionCode);

    /**
     * @描述: 根据体系编码、年份、行政区划精确获取该条件下的 todo: 区别与上面的findByCode, 上面的会去找最接近的
     * @入参: code 体系编码
     * @入参: year 年份
     * @入参: divisionCode 区划
     * @出参:
     * @作者: 余家鑫
     * @日期: 2022/3/16 上午10:34
     */
    IdtIndicatorsType accurateGet(String code, String year, String divisionCode);

    /**
    * @描述: 根据体系编码获取下级列表数据
    * @入参:
    * @出参:
    * @作者: 代鹏刚
    * @日期: 2021/10/8 11:41
    **/
    List<IdtIndicatorsType> listByType(String idtType);

    /**
     * 根据指标id或者指标编码、年份、行政区划，返回这个指标所在的指标体系。
     * @入参： idtCode 指标编码（idtCode 和 idtId必须有一个存在，如果都存在，则以idtId 为准，idtCode 是指标的自增编码）
     * @入参： idtId 指标id（idtCode 和 idtId必须有一个存在，如果都存在，则以idtId 为准）
     * @入参： year 年份
     * @入参： divisionCode 行政区划
     * @出参： 如果没有对应的指标体系，返回空列表，而不是null
     * @作者： 陈宏成
     * @日期： 2021/10/9
     */
    List<IdtIndicatorsType> findTypeForIdt(String idtCode, String idtId, int year, String divisionCode);

    /**
     * 检查名字是否存在，比较的是一个体系下的，如果属于不同体系，那就不算重名
     * @param idtType 体系编码
     * @param name 名称
     * @param id 记录id，如果不为空，则会比较重名的是不是自己；如果为空，则跳过
     * @return
     */
    boolean checkNameExistInType(String idtType, String name, String id);

    /**
     * 检查名字是否存在，比较的是指标体系的名字，也就是比较最外层的名字
     * @param name 名称
     * @param id 记录id，如果不为空，则会比较重名的是不是自己；如果为空，则跳过
     * @return
     */
    boolean checkNameExistForType(String name, String id);
}
